热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

更多|本文_记录:如何解决MultipartFile类的transferTo()上传图片报“系统找不到指定的路径“问题亲测有效

篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录:如何解决MultipartFile类的transferTo()上传图片报“系统找不到指定的路径“问题亲测有效相关的知识,希望对你有一定的参

篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录:如何解决MultipartFile类的transferTo()上传图片报“系统找不到指定的路径“问题亲测有效相关的知识,希望对你有一定的参考价值。




👨‍🎓作者:bug菌


✏️博客:CSDN、掘金等


💌公众号:猿圈奇妙屋


🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。


🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。



一、前言🔥



环境说明:springboot2.3.1.REALSE + mysql5.6 + jdk1.8



二、报错展示🔥

        在使用MultipartFile类调用transferTo()方法时,却报错了。

如下是重点报错内容:



java.io.IOException: java.io.FileNotFoundException: C:\\Users\\86157\\AppData\\Local\\Temp\\tomcat.11159546904116402439.8889\\work\\Tomcat\\localhost\\review\\.\\template\\question-img\\admin\\20220527101841.jpg (系统找不到指定的路径。)


如下是控制台报错完整截图:


三、报错排查🔥

        不假思索的一看到这“系统找不到指定的路径”,肯定是路径问题呗,我以为是我传的路径地址不对,那我debug看看,看看到最后传入到transferTo()方法时的入参是啥。很明显,确实是这串相对地址啊。

        emmm,好吧,还是报错了,我刨根问底,debug进transferTo()方法里,然后看到它有执行 this.part.write(dest.getpath 方法,进入write()方法内部,到这里,我们看到了我们想要的答案!你们看到了么?

如下是write()源码:

@Override
public void write(String fileName) throws IOException
File file = new File(fileName);
if (!file.isAbsolute())
file = new File(location, fileName);

try
fileItem.write(file);
catch (Exception e)
throw new IOException(e);

        这段方法非常明显,先是判断传入的参数是否是相对路径,如果是相对路径,它会自己给我们拼接一个父路径(location)! 所以你应该知道那个奇怪的路径是从哪里来的了吧!

        好了,现在是知道了问题在哪了吧,罪魁祸首就是transferTo()参数,如果是相对路径的话,它会自己拼接一个父路径,因为指定的相对路径中拼接我自定义的路径已经变成了一个不会存在的路径,保存肯定是失败告终。但如果你传入的参数只是一个文件名,那应该就能保存成功。但是这样,取文件的时候,又会遇到问题了,你可能都不知道文件在哪里!所以最直观的解决方案就是,给定一个绝对路径,这样妥妥是不会有问题的。


四、解决方案🔥

        所以综上,问题就在于你调用transferTo()方法,参数路径得定义一个绝对路径方可行。

        接下来,为了验证我的观点是否正确,我给图片保存目录设置一个绝对路径。那我先这样,为了给大家看的更直观一点,我直接通过获取项目根路径然后再拼接自定义路径吧!

具体演示请看如下:

        我是以postman测试上传了两张图片,然后如下是我debug第一次循环时的截图,大家可以看到,savePath地址这肯定是没问题的。因为我是通过System.getProperty("user.dir") 来获取的项目根目录,然后拼接自定义路径,如果路径不存在,我是有些自动创建目录。

 查看控制台执行sql,也是成功将路径以逗号隔开。

 接下来,给你们最直观的验证,就是查看下该保存目录下是否已经上传了图片?

很明显吧,是不是保存成功了。

最后给大家看下我postman是如何请求该接口的吧。

  ... ...

        好啦,以上就是解决该报错的所有内容啦。如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。


五、文末🔥

        如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《bug调优》,都是我一手打下的江山,持续更新中,希望能帮助到更多小伙伴们。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

        最后送大家两句我很喜欢的话,与诸君共勉!



☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以开始。

🍀你能从现在开始改变,也可以一成不变;这件事,没有规矩可言,你可以活出最精彩的自己。



​​​​​​



💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);


💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;


💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;


💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);


💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。



推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
author-avatar
W_庆祥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有